/**
 * @file
 * @author  Tsin Smith <tsin.creator@gmail.com>
 *
 * @section DESCRIPTION
 *
 */

#ifndef __TSIN_LIBRARY_BUILTINIMAGES_HPP__
#define __TSIN_LIBRARY_BUILTINIMAGES_HPP__

#include <tsin/library/common.hpp>
#include <tsin/display/Display.hpp>
#include <tsin/display/DecoratedImage.hpp>

namespace tsin {

        struct ImageInfo {
                const char *path;
                int x, y, w, h;
                BlendStyle blendStyle;

                int nrFrames;
                NextFrameHandler handler;
        };

        enum ImageSeriesId {
                TOUHOU_SMALL_BULLET_SERIES = 0,
                TOUHOU_BIG_BULLET_SERIES,
                TOUHOU_ANIMATED_BULLET_SERIES,
                TOUHOU_PLAYER,
                TOUHOU_ENEMY,
                TOUHOU_EFFECT
        };

        enum BulletColor {
                BLACK = 0,
                RED,
                PINK,
                BLUE,
                CYAN,
                GREEN,
                YELLOW,
                ORANGE,
                WHITE,
                DARK_RED,
                DARK_PINK,
                DARK_BLUE,
                DARK_CYAN,
                DARK_GREEN,
                DARK_YELLOW
        };

        enum BulletShape {
                TRIANGLE = 0,
                CIRCLE_WITH_RING,
                CIRCLE,
                ELLIPSE,
                ARROW,
                ICE,
                SPELLCARD,
                DRUG,
                DARK_RICE,
                STAR,
                BUTTERFLY,
                DAGGER,
                FADING,
                HEART,
                FIRE
        };

        enum Character {
                HAKUREI_REIMU = 0,
                KIRISAME_MARISA,
                HIJIRI_BYAKUREN,
                CHARACTER_END
        };

        enum Action {
                IDLE = 0,
                MOVE_LEFT,
                MOVE_RIGHT,
                MOVE_UP,
                MOVE_DOWN,
                CHARGE
        };

        enum Effect {
                SLOW_MODE_RING = 0
        };

        class LIBRARY_DLLEXPORT BuiltinImages {
        public:
                static bool inquiry(ImageSeriesId series, BulletShape shape,
                                    BulletColor color, ImageInfo &info);
                static bool inquiry(ImageSeriesId series, Character character,
                                    Action action, ImageInfo &info);
                static bool inquiry(ImageSeriesId series, Effect effect,
                                    ImageInfo &info);

        private:
                BuiltinImages() {}
        };

}

#endif /* __TSIN_LIBRARY_BUILTINIMAGES_HPP__ */
